from abc import ABCMeta, abstractmethod


class UserService(metaclass=ABCMeta):

    #  普通用户和管理员共用登录,返回user
    @abstractmethod
    def userLogin(self, userId, password):
        pass

    #  注册普通用户,isAdmin默认为0，无法改变，返回int
    #  返回值对应内容说明：0表示注册成功，1表示userId已经存在，2表示dormitory已经满了，3表示宿舍不存在
    #  未处理userName,password等为空的各情况，需前端对用户填入的内容做出判断
    #  外键约束要求dormitoryId必须是已经存在的宿舍
    @abstractmethod
    def userRegister(self, userId, userName, password, phone_number, dormitoryId):
        pass

    #  用户修改自己信息,需传入新的对象,返回bool,Id和dormitoryId是不允许修改的，不允许用户自己填入，需程序自己加入值再调用
    @abstractmethod
    def userUpdate(self, userId, userName, password, phone_number, dormitoryId):
        pass

    #  通过用户Id搜索用户,返回user
    @abstractmethod
    def userSearchById(self, Id):
        pass

    #  通过用户名搜索用户,返回userList
    @abstractmethod
    def userSearchByUserName(self, userName):
        pass

    """
     domitory的四个user填充顺序为从1到4，当有user移除时，后面的user自动移进填充前面的空位
     例：现有user1,user2,user3被使用
        user1移除后,原user2成为现user1，原user3成为现user2
    """

    @abstractmethod
    def userDeleteById(self, Id):
        pass
